# 导包
import unittest
from api.add666 import AddAPI
import json
from parameterized import parameterized


# 读取json文件内容
def read_json_file():
    # 定义空列表
    test_data = []

    # 打开文件
    with open("../data/add.json", encoding="utf-8") as f:
        # 获取文件的全部数据
        json_data = json.load(f)
        # 遍历测试数据
        for case_data in json_data:
            a = case_data.get("a")
            b = case_data.get("b")
            result = case_data.get("result")
            test_data.append((a, b, result))

    return test_data

# 注意：unittest框架下的参数化代码运行时必须在类的外面


# 创建测试类
class TestAddAPI(unittest.TestCase):
    # 类级别前置处理
    @classmethod
    def setUpClass(cls) -> None:
        # 类级别的前置处理方法只会执行1次
        print("我是类级别的前置处理")

    # 类级别后置处理
    @classmethod
    def tearDownClass(cls) -> None:
        print("我是类级别的后置处理")

    # 前置处理
    def setUp(self) -> None:
        # 在方法执行之前 运行的代码
        # 如：实例化类
        # 有多少个测试方法、就会被执行多少次
        print("我是方法级别的前置处理")

    # 后置处理
    def tearDown(self) -> None:
        # 在方法执行之后 运行的代码
        print("我是方法级别的后置处理")

    # 结果正确_a和b输入正确
    @parameterized.expand(read_json_file())
    def test01_success(self, a, b, result):
        result666 = AddAPI().func_add(a, b)
        print(result666)
        # 断言
        self.assertEqual(result, result666)

    # # 结果错误_a错误(a < 0)
    # def test02_a_error(self):
    #     result = AddAPI().func_add(-1, 1)
    #     print(result)
    #     # 断言
    #     self.assertEqual("Input Error", result)
    #
    # # 结果错误_b错误(b > 99)
    # def test03_b_error(self):
    #     result = AddAPI().func_add(1, 100)
    #     print(result)
    #     # 断言
    #     self.assertEqual("Input Error", result)
